package com.atguigu.safe;

import org.junit.jupiter.api.Test;

import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.concurrent.CopyOnWriteArraySet;

public class NotSafeDemo {
    public static void main(String[] args) {
        //new NotSafeDemo().listNotSafe();
        //new NotSafeDemo().setNotSafe();
        new NotSafeDemo().mapNotSafe();
    }

    private static void mapNotSafe()
    {
        Map<String,String> map = new ConcurrentHashMap();
        //Map<String,String> map = Collections.synchronizedMap(new HashMap<>());
        //Map<String,String> map = new HashMap<>();

        for (int i = 1; i <=100; i++) {
            new Thread(() -> {
                map.put(Thread.currentThread().getName(), UUID.randomUUID().toString().substring(0,6));
                System.out.println(map);
            },String.valueOf(i)).start();
        }
    }
//============================================================================
    private static void setNotSafe()
    {
        //Set<String> set = new CopyOnWriteArraySet<>();
        //Set<String> set = Collections.synchronizedSet(new HashSet<>());
        Set<String> set = new HashSet<>();

        for (int i = 1; i <=1000; i++) {
            new Thread(() -> {
                set.add(UUID.randomUUID().toString().substring(0,6));
                System.out.println(set);
            },String.valueOf(i)).start();
        }
    }

//=======================================================================================

   public void listNotSafe(){
       //List<String> list = new CopyOnWriteArrayList<>();
       //List<String> list = Collections.synchronizedList(new ArrayList<>());
       //List list = new Vector<>();
       List<String> list = new ArrayList<>();

       for (int i = 1; i <=100; i++) {
           new Thread(() -> {
               list.add(UUID.randomUUID().toString().substring(0,6));
               System.out.println(list);
           },String.valueOf(i)).start();
       }
   }
}
